package com.cdream.basic.algorithm.leetcode.findElement;

import java.util.HashSet;
import java.util.Set;

/**
 * 找循环使用快慢指针
 * @author cdream
 * @date 5/22/21
 */
public class Question202 {
    public static void main(String[] args) {
        System.out.println(new Question202().isHappy(19));
    }

    public boolean isHappy(int n) {
        Set<Integer> res = new HashSet<>();
        // 1. 计算n的平方和
        // 2.1 如果平方和为1，返回true
        // 2.2 如果平方和不为1，判断set中是否存在
        // 3.1. 如果存在，返回false
        // 3.2 如果不存在，返回true
        while (n != 1) {
            if (res.contains(n)) {
                return false;
            }
            res.add(n);
            n = sum(n);

        }
        return true;
    }

    private int sum(int n) {
        int res = 0;
        while (n != 0) {
            int num = n % 10;
            res += num * num;
            n /= 10;
        }
        return res;
    }
}
